/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.gov.fasepa.sgpf.bean;

import br.gov.fasepa.sgpf.entity.Bairro;
import br.gov.fasepa.sgpf.entity.Cargo;
import br.gov.fasepa.sgpf.entity.Endereco;
import br.gov.fasepa.sgpf.entity.Estado;
import br.gov.fasepa.sgpf.entity.Municipio;
import br.gov.fasepa.sgpf.entity.Servidor;
import br.gov.fasepa.sgpf.entity.Setor;
import br.gov.fasepa.sgpf.entity.TipoCargo;
import br.gov.fasepa.sgpf.entity.Unidade;
import br.gov.fasepa.sgpf.rn.BairroRN;
import br.gov.fasepa.sgpf.rn.CargoRN;
import br.gov.fasepa.sgpf.rn.EnderecoRN;
import br.gov.fasepa.sgpf.rn.EstadoRN;
import br.gov.fasepa.sgpf.rn.MunicipioRN;
import br.gov.fasepa.sgpf.rn.ServidorRN;
import br.gov.fasepa.sgpf.rn.TipoCargoRN;
import br.gov.fasepa.sgpf.rn.UnidadeRN;
import br.gov.fasepa.sgpf.util.CepWebService;
import br.gov.fasepa.sgpf.util.JsfUtil;
import br.gov.fasepa.sgpf.util.ManipulaIndiceTab;
import br.gov.fasepa.sgpf.util.SystemUtil;
import br.gov.fasepa.sgpf.util.Validator;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;

/**
 *
 * @author marcosdj
 */
@ManagedBean
@ViewScoped
public class ServidorBean extends ServidorRN implements Serializable {

    private Servidor servidor = new Servidor();
    private Validator validator = new Validator();
    private List<Servidor> lista;
    private List<Estado> estados = new EstadoRN().obtainAll(Estado.class);
    private List<Cargo> cargos = new CargoRN().obtainAll(Cargo.class);
    private List<TipoCargo> tipocargos = new TipoCargoRN().obtainAll(TipoCargo.class);
    private MunicipioRN mrn = new MunicipioRN();
    private BairroRN brn = new BairroRN();
    private EstadoRN ern = new EstadoRN();
    private List<Unidade> unidades = new UnidadeRN().obtainAll(Unidade.class);
    private List<Municipio> sugestoesMunicipio;
    private List<Estado> sugestoesEstado;
    private List<Bairro> sugestoesBairro;
    private List<Municipio> munporestado;
    private List<Bairro> bairropmunicipio;
    private List<Setor> setorUnidade;
    private List<ManipulaIndiceTab> campos = new ArrayList<ManipulaIndiceTab>();
    private boolean tab1;
    private boolean tab2 = true;
    private boolean tab3 = true;
    private boolean habilitaMatricula;
    private boolean habilitaSalvar = true;
    private int indexTab = 0;
    private String titulo;
    private int currentLevel = 1;
    private int level = 1;
    private ManipulaIndiceTab manipulador;
    private String tipoLogradouro;
    private String logradouro;
    private String estado;
    private String cidade;
    private String bairro;
    private String cep = null;
    private String endereco;

    public void encontraCEP() {
        CepWebService cepWebService = new CepWebService(getCep());

        if (cepWebService.getResultado() == 1) {
            setTipoLogradouro(cepWebService.getTipoLogradouro());
            setLogradouro(cepWebService.getLogradouro());
            setEstado(cepWebService.getEstado());
            setCidade(cepWebService.getCidade());
            setBairro(cepWebService.getBairro());

            Estado e = new EstadoRN().obterPorUF(estado);
            if (e != null) {
                servidor.setUf(e);
            }

            Municipio m = new MunicipioRN().obterPorNome(cidade);
            if (m != null) {
                servidor.setCidade(m);
            } else {
                m = new Municipio();
                m.setNome(cidade);
                m.setEstadoId(e);
                if (e.getMunicipioList() == null) {
                    e.setMunicipioList(new ArrayList<Municipio>());
                }
                e.getMunicipioList().add(m);
                if (e.getId() != null) {
                    ern.edit(e);
                } else {
                    ern.save(e);
                }
            }

            Bairro b = new BairroRN().obterPorNome(bairro);
            if (b != null) {
                servidor.setBairro(b);
            } else {
                b = new Bairro();
                b.setNome(bairro);
                b.setMunicipio(m);
                if (m.getBairroList() == null) {
                    m.setBairroList(new ArrayList<Bairro>());
                }
                m.getBairroList().add(b);
                if (m.getId() != null) {
                    mrn.edit(m);
                    System.out.println("Editou Município");
                } else {
                    System.out.println("Salvou Município ");
                    mrn.save(m);
                }
                b = null;
            }
            if (!cep.trim().equals("")) {
                Endereco en = new EnderecoRN().obterPorCEP(cep);
                Bairro bb = new BairroRN().obterPorNome(bairro);
                if (en == null) {
                    en = new Endereco();
                    en.setCep(cep);
                    en.setLogradoudo(logradouro);
                    en.setTipoLogradouro(tipoLogradouro);
                    en.setBairro(bb);
                    if (bb.getEnderecoList() == null) {
                        bb.setEnderecoList(new ArrayList<Endereco>());
                    }
                    bb.getEnderecoList().add(en);
                    brn.edit(bb);
                    bb = null;
                }
            }

            Municipio mtemp = mrn.obtain(Municipio.class, m.getId());
            Bairro btemp = brn.obterPorNome(bairro);
            String tempEndereco = tipoLogradouro + " " + logradouro;
            servidor.setCidade(mtemp);
            servidor.setBairro(btemp);
            servidor.setEndereco(tempEndereco);
            servidor.setCep(cep);

        } else {
            Endereco etemp = new EnderecoRN().obterPorCEP(cep);
            if (etemp != null) {
                logradouro = etemp.getLogradoudo();
                tipoLogradouro = etemp.getTipoLogradouro();
                servidor.setBairro(etemp.getBairro());
                servidor.setCidade(etemp.getBairro().getMunicipio());
                servidor.setUf(etemp.getBairro().getMunicipio().getEstadoId());
            } else {
                RequestContext.getCurrentInstance().addCallbackParam("flag", "nocep");
                logradouro = null;
                tipoLogradouro = null;
                cep = null;
            }
        }
    }

    public ServidorBean() {
        this.titulo = "CADASTRAR SERVIDOR";
        if (JsfUtil.getSession().getAttribute("UC") != null) {
            Object[] array = (Object[]) JsfUtil.getSession().getAttribute("UC");
            if (array[1] instanceof Servidor) {
                this.servidor = (Servidor) array[1];
                this.cep = servidor.getCep();
                this.habilitaSalvar = false;
                this.habilitaMatricula = true;
                this.tab2 = false;
                this.tab3 = false;
                servidor.setUnidade(servidor.getUnidade());
                if (servidor.getUnidade() != null) {
                    setorUnidade = servidor.getUnidade().getSetorList();
                }
                servidor.setSetor(servidor.getSetor());
            }
            this.titulo = "ALTERAR CADASTRO DE SERVIDOR";
        }

    }

    public String irCadPessoal() {
        validator.verificaSessao();
        return "/sistema/servidor/cadPessoal.xhtml?faces-redirect=true";
    }

    public String irLista() {
        validator.verificaSessao();
        return "/sistema/servidor/lista.xhtml?faces-redirect=true";
    }

    public String alterar() {
        return "/sistema/servidor/cadPessoal.xhtml?faces-redirect=true";
    }

    public void verificaCamposDialog() {
        if (validarCampos2()) {
            RequestContext.getCurrentInstance().addCallbackParam("flag", "salvar");
        } else {

            RequestContext.getCurrentInstance().addCallbackParam("flag", "nok");
        }
//                RequestContext.getCurrentInstance().addCallbackParam("flag", "parceirook");
    }

    public void setaIndex() {
        if (indexTab == 0) {
            tab2 = false;
//            habilitaSalvar = false;
            indexTab = 1;
        } else if (indexTab == 1) {
            tab3 = false;
            habilitaSalvar = false;
            indexTab = 2;
        }
    }

    public void voltar() {
        if (indexTab == 2) {
            indexTab = 1;
        } else if (indexTab == 1) {
            indexTab = 0;
        }
    }

    public void proximo() {
        if (validarCampos()) {
            setaIndex();
        }
    }
    
    public void salvar() {
        if (servidor.getUnidade() != null) {
            servidor.getUnidade().getServidorList().add(servidor);
        }
        if (servidor.getSetor() != null) {
            servidor.getSetor().getServidorList().add(servidor);
        }
        if (JsfUtil.getSession().getAttribute("UC") == null) {
            save(servidor);
        } else {
            edit(servidor);
        }
        servidor = null;
        cep = null;
        RequestContext.getCurrentInstance().addCallbackParam("flag", "ok");
        validator.verificaSessao();
    }

    public void cancelar() throws IOException {
        validator.verificaSessao();
        servidor = new Servidor();
        this.titulo = "CADASTRAR SERVIDOR";
        FacesContext.getCurrentInstance().getExternalContext().redirect("cadPessoal.xhtml");
    }

    public void limparLista() {
        manipulador = new ManipulaIndiceTab();
        campos = null;
        campos = new ArrayList<>();
    }

    public void putInSession(Servidor servidor) throws Exception {
        SystemUtil.updateUseCase(servidor, Servidor.class);
    }

    public boolean validarCampos() {
        boolean resposta = true;
        Servidor temp = obtain(Servidor.class, servidor.getId());
        if (temp != null) {
            if (Objects.equals(temp.getId(), servidor.getId()) && JsfUtil.getSession().getAttribute("UC") == null) {
                FacesContext.getCurrentInstance().
                        addMessage("msgServCad",
                                new FacesMessage(FacesMessage.SEVERITY_WARN, "O Servidor já está cadastrado no sistema", ""));
                resposta = false;
            }
        }
        if (indexTab == 0) {
            if (servidor.getNome() == null || servidor.getNome().trim().equals("")) {
                FacesContext.getCurrentInstance().
                        addMessage("msgNome",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Nome é obrigatório", ""));
                resposta = false;
            }

        }
        if (indexTab == 1) {
            if (servidor.getProfissao().trim().equals("")) {
                FacesContext.getCurrentInstance().
                        addMessage("msgProfissao",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Profissão é obrigatório", ""));
                resposta = false;
            }
            if (servidor.getRg() == null || servidor.getRg().trim().equals("")) {
                FacesContext.getCurrentInstance().
                        addMessage("msgRG",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo RG é obrigatório", ""));
                resposta = false;
            } else if (validator.isRGCadastrado(servidor.getRg()) && servidor.getId() == null) {
                FacesContext.getCurrentInstance().
                        addMessage("msgRG",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O RG já está cadastrado", ""));
                resposta = false;
            }
            if (servidor.getCpf() == null || servidor.getCpf().trim().equals("")) {
                FacesContext.getCurrentInstance().
                        addMessage("msgCpf",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo CPF é obrigatório", ""));
                resposta = false;
            } else if (validator.iscpfCadastrado(servidor.getCpf()) && servidor.getId() == null) {
                FacesContext.getCurrentInstance().
                        addMessage("msgServCad",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O Servidor já está cadastrado no sistema", ""));
                resposta = false;
            } else if (!validator.validCPF(servidor.getCpf().replaceAll("[.-]", ""))) {
                FacesContext.getCurrentInstance().
                        addMessage("msgCpf",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O CPF é inválido", ""));
                resposta = false;
            }

            if (servidor.getTitulo() == null || servidor.getTitulo().trim().equals("")) {
                FacesContext.getCurrentInstance().
                        addMessage("msgTitulo",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Título é obrigatório!", ""));
                resposta = false;
            } else if (validator.isTituloCadastrado(servidor.getTitulo()) && JsfUtil.getSession().getAttribute("UC") == null) {
                FacesContext.getCurrentInstance().
                        addMessage("msgTitulo",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O Título já está cadastrado!", ""));
                resposta = false;
            }
            if (servidor.getPisPasep() == null || servidor.getPisPasep().trim().equals("")) {
                FacesContext.getCurrentInstance().
                        addMessage("msgPIS",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo PIS/PASEP é obrigatório!", ""));
                resposta = false;
            } else if (validator.isPisCadastrado(servidor.getPisPasep()) && servidor.getId() == null) {
                FacesContext.getCurrentInstance().
                        addMessage("msgPIS",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O PIS/PASEP já está cadastrado!", ""));
                resposta = false;
            }
            if (servidor.getCargo() == null) {
                FacesContext.getCurrentInstance().
                        addMessage("msgCargo",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Cargo é obrigatório", ""));
                resposta = false;
            }
            if (servidor.getTipoDeCargo() == null) {
                FacesContext.getCurrentInstance().
                        addMessage("msgTipoCargo",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Tipo de cargo é obrigatório", ""));
                resposta = false;
            }
            if (servidor.getVincPrevidencia() == null || servidor.getVincPrevidencia().trim().equals("")) {
                FacesContext.getCurrentInstance().
                        addMessage("msgPrevidencia",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Vínculo previdência é obrigatório", ""));
                resposta = false;
            }
        }
        return resposta;
    }

    public boolean validarCampos2() {
        boolean resposta = true;
        Servidor temp = obtain(Servidor.class, servidor.getId());
        if (temp != null) {
            if (Objects.equals(temp.getId(), servidor.getId()) && JsfUtil.getSession().getAttribute("UC") == null) {
                FacesContext.getCurrentInstance().
                        addMessage("msgServCad",
                                new FacesMessage(FacesMessage.SEVERITY_WARN, "O Servidor já está cadastrado no sistema", ""));
                validaTabNoSalvar("O Servidor já está cadastrado no sistema", 0);
                resposta = false;
            }
        }

        if (servidor.getNome() == null || servidor.getNome().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgNome",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Nome é obrigatório", ""));
            validaTabNoSalvar("O campo Nome é obrigatório", 0);
            resposta = false;
        }

        if (servidor.getProfissao().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgProfissao",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Profissão é obrigatório", ""));
            validaTabNoSalvar("O campo Profissão é obrigatório", 1);
            resposta = false;
        }
        if (servidor.getRg() == null || servidor.getRg().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgRG",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo RG é obrigatório", ""));
            validaTabNoSalvar("O campo RG é obrigatório", 1);
            resposta = false;
        } else if (validator.isRGCadastrado(servidor.getRg()) && servidor.getId() == null) {
            FacesContext.getCurrentInstance().
                    addMessage("msgRG",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O RG já está cadastrado", ""));
            validaTabNoSalvar("O RG já está cadastrado", 1);
            resposta = false;
        }

        if (servidor.getCpf() == null || servidor.getCpf().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgCpf",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo CPF é obrigatório", ""));
            validaTabNoSalvar("O campo CPF é obrigatório", 1);
            resposta = false;
        } else if (validator.iscpfCadastrado(servidor.getCpf()) && servidor.getId() == null) {
            FacesContext.getCurrentInstance().
                    addMessage("msgServCad",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O Servidor já está cadastrado no sistema", ""));
            validaTabNoSalvar("O Servidor já está cadastrado no sistema", 1);
            resposta = false;
        } else if (!validator.validCPF(servidor.getCpf().replaceAll("[.-]", ""))) {
            FacesContext.getCurrentInstance().
                    addMessage("msgCpf",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O CPF é inválido", ""));
            validaTabNoSalvar("O CPF é inválido", 1);
            resposta = false;
        }

        if (servidor.getTitulo()
                == null || servidor.getTitulo().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgTitulo",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Título é obrigatório", ""));
            validaTabNoSalvar("O campo Tíulo é obrigatório", 1);
            resposta = false;
        } else if (validator.isTituloCadastrado(servidor.getTitulo()) && servidor.getId() == null) {
            FacesContext.getCurrentInstance().
                    addMessage("msgTitulo",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O Título já está cadastrado!", ""));
            validaTabNoSalvar("O Título já está cadastrado!", 1);
            resposta = false;
        }

        if (servidor.getPisPasep() == null || servidor.getPisPasep().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgPIS",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo PIS/PASEP é obrigatório", ""));
            validaTabNoSalvar("O campo PIS/PASEP é obrigatório", 1);
            resposta = false;
        } else if (validator.isPisCadastrado(servidor.getPisPasep()) && servidor.getId() == null) {
            FacesContext.getCurrentInstance().
                    addMessage("msgPIS",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O PIS/PASEP já está cadastrado!", ""));
            validaTabNoSalvar("O PIS/PASEP já está cadastrado!", 1);
            resposta = false;
        }
        if (servidor.getCargo() == null) {
            FacesContext.getCurrentInstance().
                    addMessage("msgCargo",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Cargo é obrigatório", ""));
            validaTabNoSalvar("O campo Cargo é obrigatório", 1);
            resposta = false;
        }
        if (servidor.getTipoDeCargo() == null) {
            FacesContext.getCurrentInstance().
                    addMessage("msgTipoCargo",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Tipo de cargo é obrigatório", ""));
            validaTabNoSalvar("O campo Tipo de cargo é obrigatório", 1);
            resposta = false;
        }
        if (servidor.getVincPrevidencia() == null || servidor.getVincPrevidencia().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgPrevidencia",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Vínculo previdência é obrigatório", ""));
            validaTabNoSalvar("O campo Vínculo previdência é obrigatório", 1);
            resposta = false;
        }

        if (servidor.getStatus() == null || servidor.getStatus().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgStatus",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Status é obrigatório", ""));
            validaTabNoSalvar("O campo Status é obrigatório", 2);
            resposta = false;
        }
        if (servidor.getDataAdmissao() == null) {
            FacesContext.getCurrentInstance().
                    addMessage("msgData",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Data admissão é obrigatório", ""));
            validaTabNoSalvar("O campo Data admissão é obrigatório", 2);
            resposta = false;
        }
        if (!servidor.getEmail().trim().equals("")) {
            if (!validator.validEmail(servidor.getEmail().trim())) {
                FacesContext.getCurrentInstance().
                        addMessage("msgEmail",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Email é inválido", ""));
                validaTabNoSalvar("O campo Email é inválido", 2);
                resposta = false;
            }
        }
        if (servidor.getFuncao().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgFuncao",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O campo Função é obrigatório", ""));
            validaTabNoSalvar("O campo Função é obrigatório", 2);
            resposta = false;
        }

        return resposta;
    }

    public void selecionaUF() {
        munporestado = servidor.getUf().getMunicipioList();
    }

    public void selecionaBairro() {
//        Municipio value = (Municipio) event.getNewValue();
        bairropmunicipio = servidor.getCidade().getBairroList();
    }

    public void selecionaSetorUnidade() {
        if (servidor.getUnidade().getSetorList() != null) {
            setorUnidade = servidor.getUnidade().getSetorList();
        }
    }

    public List<Municipio> autoCompleteMunicipio(String query) {
        munporestado = new MunicipioRN().obtainAll(Municipio.class);
        sugestoesMunicipio = new ArrayList<>();
        if (munporestado != null) {
            for (Municipio m : munporestado) {
                if (m.getNome().toLowerCase().contains(query.toLowerCase())) {
                    sugestoesMunicipio.add(m);
                }
            }
        }
        return sugestoesMunicipio;
    }

    public List<Estado> autoCompleteEstado(String query) {
        sugestoesEstado = new ArrayList<>();
        if (estados != null) {
            for (Estado es : estados) {
                if (es.getNome().toLowerCase().contains(query.toLowerCase())) {
                    sugestoesEstado.add(es);
                }
            }
        }
        return sugestoesEstado;
    }

    public List<Bairro> autoCompleteBairro(String query) {
        bairropmunicipio = new BairroRN().obtainAll(Bairro.class
        );
        sugestoesBairro = new ArrayList<>();
        if (bairropmunicipio
                != null) {
            for (Bairro b : bairropmunicipio) {
                if (b.getNome().toLowerCase().contains(query.toLowerCase())) {
                    sugestoesBairro.add(b);
                }
            }
        }
        return sugestoesBairro;
    }

    public Servidor getServidor() {
        return servidor;
    }

    public List<Estado> getEstados() {
        Collections.sort(estados, new Comparator<Estado>() {
            @Override
            public int compare(Estado o1, Estado o2) {
                return o1.getNome().toUpperCase().compareTo(o2.getNome().toUpperCase());
            }
        });
        return estados;
    }

    private void validaTabNoSalvar(String msg, int tab) {
        manipulador = new ManipulaIndiceTab();
        indexTab = tab;
        manipulador.setIndiceTab(indexTab);
        manipulador.setMensagem(msg);
        campos.add(manipulador);
    }

    public void setEstados(List<Estado> estados) {
        this.estados = estados;
    }

    public List<Setor> getSetorUnidade() {
        return setorUnidade;
    }

    public void setSetorUnidade(List<Setor> setorUnidade) {
        this.setorUnidade = setorUnidade;
    }

    public void setServidor(Servidor servidor) {
        this.servidor = servidor;
    }

    public List<Servidor> getLista() {
        List<Servidor> ltemp = listaDecrescente();
        if (ltemp != null) {
            lista = ltemp;
        }
        return lista;
    }

    public void setLista(List<Servidor> lista) {
        this.lista = lista;
    }

    public List<Municipio> getSugestoes() {
        return sugestoesMunicipio;
    }

    public List<Municipio> getMunporestado() {
        return munporestado;
    }

    public void setMunporestado(List<Municipio> munporestado) {
        this.munporestado = munporestado;
    }

    public void setSugestoes(List<Municipio> sugestoes) {
        this.sugestoesMunicipio = sugestoes;
    }

    public List<Bairro> getBairropmunicipio() {
        if (bairropmunicipio != null) {
            Collections.sort(bairropmunicipio, new Comparator<Bairro>() {
                @Override
                public int compare(Bairro o1, Bairro o2) {
                    return o1.getNome().toUpperCase().compareTo(o2.getNome().toUpperCase());
                }
            });
        }

        return bairropmunicipio;
    }

    public void setBairropmunicipio(List<Bairro> bairropmunicipio) {
        this.bairropmunicipio = bairropmunicipio;
    }

    public List<Unidade> getUnidades() {
        return unidades;
    }

    public void setUnidades(List<Unidade> unidades) {
        this.unidades = unidades;
    }

    public List<Cargo> getCargos() {
        return cargos;
    }

    public List<TipoCargo> getTipocargos() {
        return tipocargos;
    }

    public void setTipocargos(List<TipoCargo> tipocargos) {
        this.tipocargos = tipocargos;
    }

    public List<ManipulaIndiceTab> getCampos() {
        return campos;
    }

    public void setCampos(List<ManipulaIndiceTab> campos) {
        this.campos = campos;
    }

    public void setCargos(List<Cargo> cargos) {
        this.cargos = cargos;
    }

    public boolean isTab1() {
        return tab1;
    }

    public void setTab1(boolean tab1) {
        this.tab1 = tab1;
    }

    public boolean isTab2() {
        return tab2;
    }

    public void setTab2(boolean tab2) {
        this.tab2 = tab2;
    }

    public boolean isTab3() {
        return tab3;
    }

    public void setTab3(boolean tab3) {
        this.tab3 = tab3;
    }

    public boolean isHabilitaSalvar() {
        return habilitaSalvar;
    }

    public void setHabilitaSalvar(boolean habilitaSalvar) {
        this.habilitaSalvar = habilitaSalvar;
    }

    public int getIndexTab() {
        return indexTab;
    }

    public void setIndexTab(int indexTab) {
        this.indexTab = indexTab;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public int getCurrentLevel() {
        return currentLevel;
    }

    public void setCurrentLevel(int currentLevel) {
        this.currentLevel = currentLevel;
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    public ManipulaIndiceTab getManipulador() {
        return manipulador;
    }

    public void setManipulador(ManipulaIndiceTab manipulador) {
        this.manipulador = manipulador;
    }

    public String getTipoLogradouro() {
        return tipoLogradouro;
    }

    public void setTipoLogradouro(String tipoLogradouro) {
        this.tipoLogradouro = tipoLogradouro;
    }

    public String getLogradouro() {
        return logradouro;
    }

    public void setLogradouro(String logradouro) {
        this.logradouro = logradouro;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public boolean isHabilitaMatricula() {
        return habilitaMatricula;
    }

    public void setHabilitaMatricula(boolean habilitaMatricula) {
        this.habilitaMatricula = habilitaMatricula;
    }

}
